import React from 'react'
import ReactDOM from 'react-dom/client'
import { RouterProvider } from 'react-router-dom'
import router from './router'
import '@nutui/nutui-react/dist/style.css'
import AgoraRTC, { AgoraRTCProvider } from "agora-rtc-react";

// 视频通话场景下，将mode 设设为 “rtc”
const client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" })



import axios from 'axios'
// axios.defaults.baseURL = 'http://localhost:3000';
// axios.defaults.timeout = 5000; // 设置超时时间
let urls=[]
// 请求拦截器
axios.interceptors.request.use(
  config => {
    const token = sessionStorage.getItem('token');
    if (token) {
      console.log('req')
      config.headers.Authorization = `Bearer ${token}`;
      if (config.url !== 'http://localhost:3000/zjj/refreshtoken') {
        urls.push(config.url)
        // console.log(urls,'urls');
      }
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);
axios.interceptors.response.use(
  response => {
    // 在这里处理响应数据，例如处理 token 过期后的刷新逻辑
    console.log(response,'res');
    if (response.data.status === 401) {
      getUpdatedToken(); // 尝试获取新的 token
      console.log('new');
      let token=sessionStorage.getItem('token')
      if (token) {
        console.log(token,'new');
        axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;
        let originalRequest = urls.pop()
        console.log(originalRequest,'resnd');
        return axios(originalRequest); // 重新发送原始请求
      }
    }
    // else if (response.data.status === 200 && typeof response.data.newToken === 'string') {
    //   let token=sessionStorage.getItem('token')
    //   axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;
    //     let originalRequest = urls.pop()
    //     // console.log(originalRequest,'resend1');
    //     return axios(originalRequest); 
    //   }
    else {
      return response;
    }
  },
  async (error) => {
    // 在这里处理响应错误，例如处理 token 过期后重新获取 token 并重试请求
    const originalRequest = error.config;
    console.log(originalRequest);
    console.log(error.response);
    if (error.response.status === 401 && !originalRequest._retry) {
      // originalRequest._retry = true;
      // const token =getUpdatedToken(); // 尝试获取新的 token
      // if (token) {
      //   axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;
      //   return axios(originalRequest); // 重新发送原始请求
      // }
    }
    return Promise.reject(error);
  }
);

// 获取最新的 token 的方法
let getUpdatedToken= async ()=> {
  let res = await axios.get('http://localhost:3000/zjj/refreshtoken',{refreshToken:sessionStorage.getItem('refToken'),tel:sessionStorage.getItem('tel')})
  if (res.data.code === 200) {
    console.log(res.data.newToken);
    sessionStorage.setItem('token', res.data.newToken)
    return res.data.newToken
  }
  // 实现获取最新 token 的逻辑，例如调用刷新 token 的接口
  // 返回最新的 token 或者 null（表示无法刷新 token）
  // 这里可以根据具体的实现进行调整
  // return 'your-new-token'; // 这里假设直接返回一个新 token，实际中可能需要更复杂的逻辑
}
ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
      <AgoraRTCProvider client={client}>
        <RouterProvider router={router} />
      </AgoraRTCProvider>
  </React.StrictMode>,
)
